# 文件的读写
# 创建或打开文件操作：file=open(filename,[,mode[,buffering]])
# 编码技术：即翻译的规则，记录了如何将原始内容翻译成二进制形式，以及如何将二进制形式数据翻译回人类可识别内容
# 计算机中有许多可用编码方式：UTF-8，GBK，Big5等，不同的编码将内容翻译成二进制也是不同的
# 默认的编码方式如果是GBK，这个是中文编码，也可以指定一个编码方式如在调用open()函数时，通过添加encoding='utf-8'即可将编码指定为UTF-8国际编码。
# open()打开函数
# open(name,mode,encoding)
# name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)
# mode:设置打开文件的模式：只读、写入、追加等
# 使用open函数打开文件，返回一个文件对象。常用的模式有：
# 'r'：只读模式（默认）。文件必须存在否则抛出异常。
# 'w'：写入模式。如果文件存在，会覆盖文件内容。(如果文件不存在，则会创建一个新的文件。)
# 'a'：追加模式。如果文件存在，会在文件末尾追加内容。(如果文件不存在，则会创建一个新的文件。)
# 'b'：二进制模式。可以与'r'、'w'、'a'结合使用，如'rb'、'wb'、'ab'。
# '+'：更新模式。可以与'r'、'w'结合使用，如'r+'、'w+'。r+模式允许读写，但文件指针默认在文件开头，需要先移动指针才能写入。
# encoding:编码格式(其顺序不是第三位，不用位置参数，用关键字参数来指定)
fobj=open('./Test.txto','w')
# 开始操作(读/写操作)
fobj.write('在苍茫的大海上')#内容会先写入到内存中
fobj.write('狂风卷积着乌云')
# 缓冲区是操作系统或编程语言提供的一种机制，用于临时存储输入或输出的数据。使用缓冲区可以提高数据处理的效率，减少频繁的磁盘访问或网络传输。然而，在某些情况下，我们需要确保数据被立即写入或输出，这时就需要使用flush()函数来清空缓冲区。
fobj.flush()#flush刷新缓冲区，确保缓冲区中的数据被立即写入或输出到目标位置(将内存中积攒的内容，写入到硬盘的文件中)
fobj.close()#close方法内置flush的功能，该方法会首先刷新缓冲区中任何还没有写入的信息，即将缓冲区中的数据写入文件，然后再关闭文件。这意味着，在大多数情况下，你不需要在关闭文件之前显式地调用flush()方法，因为close()已经为你做了这件事。
# 以二进制的形式打开文件
fobj=open('Test_1.txt','wb')#str-->bytes
fobj.write('在乌云和大海之间'.encode('utf-8'))
fobj.close()
fobj=open('Test.txt','a')#用于追加数据
fobj.write('在乌云和大海之间\n')
fobj.write('海燕像黑色的闪电\n')
fobj.close()
# 读数据操作：file.read([size])
f=open('Test.txt','r')
# print(f.read())#读取所有内容
# print(f.read(12))#size为指定要读取的字符个数，省略则一次性读取所有内容，若二次读取将从第一次读取的位置继续读取
# print(f.readline())#读取一行数据，每次for循环也是读取文件中的一行数据
print(f.readlines())#读取全部行，返回一个字符串列表，列表中每个元素记录一行内容。若二次读取将从第一次读取的位置继续读取
f.close()#关闭文件对象，解除该文件被当前程序的占用，释放资源
# with是一个上下文管理对象
# 打开文件时使用with语句，能实现处理文件时无论是否抛出异常，都能保证整个with语句块结束后自动关闭已经打开的文件
with open('Test.txt','a') as f:
    # print(f.read())
    f.write('我觉得python非常的好学')
    pass
# 小结p157

